package work.linruchang;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.img.ImgUtil;
import cn.hutool.core.io.FileUtil;
import lombok.SneakyThrows;
import wiki.xsx.core.pdf.component.XEasyPdfComponent;
import wiki.xsx.core.pdf.doc.XEasyPdfDocument;
import wiki.xsx.core.pdf.doc.XEasyPdfPage;
import wiki.xsx.core.pdf.doc.XEasyPdfPageRectangle;
import wiki.xsx.core.pdf.handler.XEasyPdfHandler;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.util.List;

/**
 * @author LinRuChang
 * @version 1.0
 * @date 2022/09/03
 * @since 1.8
 **/
public class OtherEasyPdfTest3 {

    /**
     * 本地文件转成Itex的图片对象  【转换失败不抛出异常直接返回null】
     *
     * @param imageFile    图片文件
     * @return
     */
    public static XEasyPdfComponent toEasyPdfImage(File imageFile) {
        return XEasyPdfHandler.Image.build(imageFile);
    }

    public static XEasyPdfPage customNewPageByImage(File image) {
        BufferedImage bufferedImage = ImgUtil.toBufferedImage(ImgUtil.toImage(FileUtil.readBytes(image)));
        return XEasyPdfHandler.Page.build(XEasyPdfPageRectangle.create(Convert.toFloat(bufferedImage.getWidth()), Convert.toFloat(bufferedImage.getHeight())));
    }


    /**
     * 图片转PDF（每张图就是每页的PDF（每张根据图片的宽高进行调整））
     * 文档：https://www.x-easypdf.cn/#/md/pdfbox/%E5%8A%A9%E6%89%8B%E8%AF%B4%E6%98%8E?id=%e5%9b%be%e7%89%87%e6%9e%84%e5%bb%ba
     *
     * @param imageFiles        一系列图片文件
     * @param targetPdfFilePath 合并后的pdf路径
     */
    @SneakyThrows
    public static File imagesToPdf(List<File> imageFiles, File targetPdfFilePath) {


        if (CollUtil.isNotEmpty(imageFiles) && targetPdfFilePath != null) {


            XEasyPdfDocument document = XEasyPdfHandler.Document.build();

            imageFiles.stream().forEachOrdered(imageFile -> {
                XEasyPdfComponent xEasyPdfImage = toEasyPdfImage(imageFile);
                XEasyPdfPage newPage = customNewPageByImage(imageFile);
                newPage.addComponent(xEasyPdfImage);
                document.addPage(newPage);
            });

            document.save(new FileOutputStream(targetPdfFilePath)).close();

            return targetPdfFilePath;
        }

        return null;
    }

    public static void main(String[] args) {
        List<File> imagesFiles = CollUtil.list(false, FileUtil.file("D:\\截图3\\合并截图0-版权信息.jpg"), FileUtil.file("D:\\截图3\\合并截图1-小桥老树致微信读书朋友的一封信+独家视频.jpg"));
        File resultPdf = FileUtil.file("D:\\截图3\\test2.pdf");
        imagesToPdf(imagesFiles, resultPdf);
    }

}
